package com.xinrui.sunnyday.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.xinrui.sunnyday.constant.MessageConstant;
import com.xinrui.sunnyday.entity.Result;
import com.xinrui.sunnyday.pojo.OrderSetting;
import com.xinrui.sunnyday.service.OrderSettingService;
import com.xinrui.sunnyday.utils.POIUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Controller
@ResponseBody
@RequestMapping("/orderSetting")
public class OrderSettingController {
    @Reference
    private OrderSettingService orderSettingService;

    /**
     * 批量处理,上传文件
     *
     * @param excelFile
     * @return
     */
    @PostMapping("/upload")
    public Result upload(MultipartFile excelFile) {
        try {
            //        1.通过工具类读取文档
            List<String[]> excelFileList = POIUtils.readExcel(excelFile);
//            2.将读取到的数据转换为List<OrderSetting>
//                创建一个对象集合
            List<OrderSetting> orderSettings = new ArrayList<>();
//            日期解析格式，这里使用了工具类调用格式
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(POIUtils.DATE_FORMAT);
//            第一个一定是date，第二个一定是int类型
//            格式后的date类型
            Date ordersDate = null;
//            创建一个对象存放转换后的数据
            OrderSetting orderSetting = null;
//            遍历通过工具类读取的文档
            for (String[] dataArr : excelFileList) {
                /*格式化第一列数据,因为前台转过来的数据都是String类型所以需要转换为Date类型,这样子才能放到对象集合里面去*/
                ordersDate = simpleDateFormat.parse(dataArr[0]);
//              获取第二列数据,转换成int类型,才能放到对象集合
                Integer s = Integer.valueOf(dataArr[1]);
//                将遍历的数据放到对象中
                orderSetting = new OrderSetting(ordersDate, s);
//                将对象放到集合中,遍历多少次添加多少次
                orderSettings.add(orderSetting);
            }
//            将集合传递到service层
            orderSettingService.add(orderSettings);
            //                添加成功
            return new Result(true, MessageConstant.ORDERSETTING_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, MessageConstant.ORDERSETTING_FAIL);
        }
    }

    /**
     * 查询显示预约信息
     *
     * @param time
     * @return
     */
    @GetMapping("/findAllDate")
    public Result findAllDate(String time) {
        List<Map<String, Integer>> list = orderSettingService.findAllDate(time);
        return new Result(true, MessageConstant.QUERY_ORDER_SUCCESS, list);
    }

    /**
     * 修改可预约信息
     * @param orderSetting
     * @return
     */
    @PostMapping("/update")
    public Result update(@RequestBody OrderSetting orderSetting) {
        orderSettingService.update(orderSetting);
        return new Result(true, MessageConstant.ORDERSETTING_SUCCESS);
    }
}

